@bendyline/squisq 0.1.2 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{themeLibrary-DySHPcgj.d.ts → Doc-1hmT1LZl.d.ts} +1 -42
- package/dist/__tests__/animationUtils.test.d.ts +2 -0
- package/dist/__tests__/animationUtils.test.d.ts.map +1 -0
- package/dist/__tests__/animationUtils.test.js +60 -0
- package/dist/__tests__/animationUtils.test.js.map +1 -0
- package/dist/__tests__/contentExtractor.test.d.ts +2 -0
- package/dist/__tests__/contentExtractor.test.d.ts.map +1 -0
- package/dist/__tests__/contentExtractor.test.js +151 -0
- package/dist/__tests__/contentExtractor.test.js.map +1 -0
- package/dist/__tests__/geohash.test.d.ts +2 -0
- package/dist/__tests__/geohash.test.d.ts.map +1 -0
- package/dist/__tests__/geohash.test.js +87 -0
- package/dist/__tests__/geohash.test.js.map +1 -0
- package/dist/__tests__/getLayers.test.d.ts +2 -0
- package/dist/__tests__/getLayers.test.d.ts.map +1 -0
- package/dist/__tests__/getLayers.test.js +167 -0
- package/dist/__tests__/getLayers.test.js.map +1 -0
- package/dist/__tests__/haversine.test.d.ts +2 -0
- package/dist/__tests__/haversine.test.d.ts.map +1 -0
- package/dist/__tests__/haversine.test.js +56 -0
- package/dist/__tests__/haversine.test.js.map +1 -0
- package/dist/__tests__/localForageAdapter.test.d.ts +8 -0
- package/dist/__tests__/localForageAdapter.test.d.ts.map +1 -0
- package/dist/__tests__/localForageAdapter.test.js +130 -0
- package/dist/__tests__/localForageAdapter.test.js.map +1 -0
- package/dist/__tests__/markdown.test.d.ts +2 -0
- package/dist/__tests__/markdown.test.d.ts.map +1 -0
- package/dist/__tests__/markdown.test.js +654 -0
- package/dist/__tests__/markdown.test.js.map +1 -0
- package/dist/__tests__/markdownToDoc.test.d.ts +2 -0
- package/dist/__tests__/markdownToDoc.test.d.ts.map +1 -0
- package/dist/__tests__/markdownToDoc.test.js +313 -0
- package/dist/__tests__/markdownToDoc.test.js.map +1 -0
- package/dist/__tests__/seededRandom.test.d.ts +2 -0
- package/dist/__tests__/seededRandom.test.d.ts.map +1 -0
- package/dist/__tests__/seededRandom.test.js +125 -0
- package/dist/__tests__/seededRandom.test.js.map +1 -0
- package/dist/__tests__/slideshowGenerator.test.d.ts +2 -0
- package/dist/__tests__/slideshowGenerator.test.d.ts.map +1 -0
- package/dist/__tests__/slideshowGenerator.test.js +114 -0
- package/dist/__tests__/slideshowGenerator.test.js.map +1 -0
- package/dist/__tests__/storage.test.d.ts +2 -0
- package/dist/__tests__/storage.test.d.ts.map +1 -0
- package/dist/__tests__/storage.test.js +51 -0
- package/dist/__tests__/storage.test.js.map +1 -0
- package/dist/__tests__/templates.test.d.ts +2 -0
- package/dist/__tests__/templates.test.d.ts.map +1 -0
- package/dist/__tests__/templates.test.js +217 -0
- package/dist/__tests__/templates.test.js.map +1 -0
- package/dist/__tests__/timing.test.d.ts +2 -0
- package/dist/__tests__/timing.test.d.ts.map +1 -0
- package/dist/__tests__/timing.test.js +131 -0
- package/dist/__tests__/timing.test.js.map +1 -0
- package/dist/chunk-3E5F2XMR.js +129 -0
- package/dist/chunk-3E5F2XMR.js.map +1 -0
- package/dist/chunk-6YJPI6VI.js +35 -0
- package/dist/chunk-6YJPI6VI.js.map +1 -0
- package/dist/chunk-FVTQSNR7.js +100 -0
- package/dist/chunk-FVTQSNR7.js.map +1 -0
- package/dist/chunk-V543AI2F.js +1 -0
- package/dist/chunk-V543AI2F.js.map +1 -0
- package/dist/chunk-VP5SZTZ2.js +792 -0
- package/dist/chunk-VP5SZTZ2.js.map +1 -0
- package/dist/doc/docToMarkdown.d.ts +41 -0
- package/dist/doc/docToMarkdown.d.ts.map +1 -0
- package/dist/doc/docToMarkdown.js +88 -0
- package/dist/doc/docToMarkdown.js.map +1 -0
- package/dist/doc/getLayers.d.ts +65 -0
- package/dist/doc/getLayers.d.ts.map +1 -0
- package/dist/doc/getLayers.js +103 -0
- package/dist/doc/getLayers.js.map +1 -0
- package/dist/doc/index.d.ts +9 -3
- package/dist/doc/index.d.ts.map +1 -0
- package/dist/doc/index.js +6 -125
- package/dist/doc/index.js.map +1 -1
- package/dist/doc/markdownToDoc.d.ts +68 -0
- package/dist/doc/markdownToDoc.d.ts.map +1 -0
- package/dist/doc/markdownToDoc.js +225 -0
- package/dist/doc/markdownToDoc.js.map +1 -0
- package/dist/doc/templates/accentImage.d.ts +59 -0
- package/dist/doc/templates/accentImage.d.ts.map +1 -0
- package/dist/doc/templates/accentImage.js +275 -0
- package/dist/doc/templates/accentImage.js.map +1 -0
- package/dist/doc/templates/captionUtils.d.ts +20 -0
- package/dist/doc/templates/captionUtils.d.ts.map +1 -0
- package/dist/doc/templates/captionUtils.js +29 -0
- package/dist/doc/templates/captionUtils.js.map +1 -0
- package/dist/doc/templates/comparisonBar.d.ts +13 -0
- package/dist/doc/templates/comparisonBar.d.ts.map +1 -0
- package/dist/doc/templates/comparisonBar.js +127 -0
- package/dist/doc/templates/comparisonBar.js.map +1 -0
- package/dist/doc/templates/coverBlock.d.ts +51 -0
- package/dist/doc/templates/coverBlock.d.ts.map +1 -0
- package/dist/doc/templates/coverBlock.js +125 -0
- package/dist/doc/templates/coverBlock.js.map +1 -0
- package/dist/doc/templates/dateEvent.d.ts +15 -0
- package/dist/doc/templates/dateEvent.d.ts.map +1 -0
- package/dist/doc/templates/dateEvent.js +110 -0
- package/dist/doc/templates/dateEvent.js.map +1 -0
- package/dist/doc/templates/definitionCard.d.ts +13 -0
- package/dist/doc/templates/definitionCard.d.ts.map +1 -0
- package/dist/doc/templates/definitionCard.js +114 -0
- package/dist/doc/templates/definitionCard.js.map +1 -0
- package/dist/doc/templates/factCard.d.ts +15 -0
- package/dist/doc/templates/factCard.d.ts.map +1 -0
- package/dist/doc/templates/factCard.js +100 -0
- package/dist/doc/templates/factCard.js.map +1 -0
- package/dist/doc/templates/fullBleedQuote.d.ts +13 -0
- package/dist/doc/templates/fullBleedQuote.d.ts.map +1 -0
- package/dist/doc/templates/fullBleedQuote.js +54 -0
- package/dist/doc/templates/fullBleedQuote.js.map +1 -0
- package/dist/doc/templates/imageWithCaption.d.ts +13 -0
- package/dist/doc/templates/imageWithCaption.d.ts.map +1 -0
- package/dist/doc/templates/imageWithCaption.js +142 -0
- package/dist/doc/templates/imageWithCaption.js.map +1 -0
- package/dist/doc/templates/index.d.ts +104 -0
- package/dist/doc/templates/index.d.ts.map +1 -0
- package/dist/doc/templates/index.js +442 -0
- package/dist/doc/templates/index.js.map +1 -0
- package/dist/doc/templates/listBlock.d.ts +13 -0
- package/dist/doc/templates/listBlock.d.ts.map +1 -0
- package/dist/doc/templates/listBlock.js +89 -0
- package/dist/doc/templates/listBlock.js.map +1 -0
- package/dist/doc/templates/mapBlock.d.ts +17 -0
- package/dist/doc/templates/mapBlock.d.ts.map +1 -0
- package/dist/doc/templates/mapBlock.js +112 -0
- package/dist/doc/templates/mapBlock.js.map +1 -0
- package/dist/doc/templates/persistentLayers.d.ts +39 -0
- package/dist/doc/templates/persistentLayers.d.ts.map +1 -0
- package/dist/doc/templates/persistentLayers.js +447 -0
- package/dist/doc/templates/persistentLayers.js.map +1 -0
- package/dist/doc/templates/photoGrid.d.ts +20 -0
- package/dist/doc/templates/photoGrid.d.ts.map +1 -0
- package/dist/doc/templates/photoGrid.js +172 -0
- package/dist/doc/templates/photoGrid.js.map +1 -0
- package/dist/doc/templates/pullQuote.d.ts +13 -0
- package/dist/doc/templates/pullQuote.d.ts.map +1 -0
- package/dist/doc/templates/pullQuote.js +109 -0
- package/dist/doc/templates/pullQuote.js.map +1 -0
- package/dist/doc/templates/quoteBlock.d.ts +15 -0
- package/dist/doc/templates/quoteBlock.d.ts.map +1 -0
- package/dist/doc/templates/quoteBlock.js +97 -0
- package/dist/doc/templates/quoteBlock.js.map +1 -0
- package/dist/doc/templates/sectionHeader.d.ts +14 -0
- package/dist/doc/templates/sectionHeader.d.ts.map +1 -0
- package/dist/doc/templates/sectionHeader.js +96 -0
- package/dist/doc/templates/sectionHeader.js.map +1 -0
- package/dist/doc/templates/statHighlight.d.ts +15 -0
- package/dist/doc/templates/statHighlight.d.ts.map +1 -0
- package/dist/doc/templates/statHighlight.js +99 -0
- package/dist/doc/templates/statHighlight.js.map +1 -0
- package/dist/doc/templates/titleBlock.d.ts +13 -0
- package/dist/doc/templates/titleBlock.d.ts.map +1 -0
- package/dist/doc/templates/titleBlock.js +92 -0
- package/dist/doc/templates/titleBlock.js.map +1 -0
- package/dist/doc/templates/twoColumn.d.ts +15 -0
- package/dist/doc/templates/twoColumn.d.ts.map +1 -0
- package/dist/doc/templates/twoColumn.js +219 -0
- package/dist/doc/templates/twoColumn.js.map +1 -0
- package/dist/doc/templates/videoPullQuote.d.ts +20 -0
- package/dist/doc/templates/videoPullQuote.d.ts.map +1 -0
- package/dist/doc/templates/videoPullQuote.js +118 -0
- package/dist/doc/templates/videoPullQuote.js.map +1 -0
- package/dist/doc/templates/videoWithCaption.d.ts +20 -0
- package/dist/doc/templates/videoWithCaption.d.ts.map +1 -0
- package/dist/doc/templates/videoWithCaption.js +104 -0
- package/dist/doc/templates/videoWithCaption.js.map +1 -0
- package/dist/doc/utils/animationUtils.d.ts +34 -0
- package/dist/doc/utils/animationUtils.d.ts.map +1 -0
- package/dist/doc/utils/animationUtils.js +110 -0
- package/dist/doc/utils/animationUtils.js.map +1 -0
- package/dist/doc/utils/themeUtils.d.ts +55 -0
- package/dist/doc/utils/themeUtils.d.ts.map +1 -0
- package/dist/doc/utils/themeUtils.js +109 -0
- package/dist/doc/utils/themeUtils.js.map +1 -0
- package/dist/generate/contentExtractor.d.ts +112 -0
- package/dist/generate/contentExtractor.d.ts.map +1 -0
- package/dist/generate/contentExtractor.js +638 -0
- package/dist/generate/contentExtractor.js.map +1 -0
- package/dist/generate/index.d.ts +7 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +4 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/generate/slideshowGenerator.d.ts +72 -0
- package/dist/generate/slideshowGenerator.d.ts.map +1 -0
- package/dist/generate/slideshowGenerator.js +159 -0
- package/dist/generate/slideshowGenerator.js.map +1 -0
- package/dist/generate/templateMapper.d.ts +23 -0
- package/dist/generate/templateMapper.d.ts.map +1 -0
- package/dist/generate/templateMapper.js +114 -0
- package/dist/generate/templateMapper.js.map +1 -0
- package/dist/index.d.ts +9 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -216
- package/dist/index.js.map +1 -1
- package/dist/markdown/convert.d.ts +71 -0
- package/dist/markdown/convert.d.ts.map +1 -0
- package/dist/markdown/convert.js +746 -0
- package/dist/markdown/convert.js.map +1 -0
- package/dist/markdown/htmlParse.d.ts +26 -0
- package/dist/markdown/htmlParse.d.ts.map +1 -0
- package/dist/markdown/htmlParse.js +195 -0
- package/dist/markdown/htmlParse.js.map +1 -0
- package/dist/markdown/index.d.ts +19 -225
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +33 -32
- package/dist/markdown/index.js.map +1 -1
- package/dist/markdown/parse.d.ts +27 -0
- package/dist/markdown/parse.d.ts.map +1 -0
- package/dist/markdown/parse.js +90 -0
- package/dist/markdown/parse.js.map +1 -0
- package/dist/markdown/stringify.d.ts +32 -0
- package/dist/markdown/stringify.d.ts.map +1 -0
- package/dist/markdown/stringify.js +108 -0
- package/dist/markdown/stringify.js.map +1 -0
- package/dist/markdown/types.d.ts +496 -0
- package/dist/markdown/types.d.ts.map +1 -0
- package/dist/markdown/types.js +17 -0
- package/dist/markdown/types.js.map +1 -0
- package/dist/markdown/utils.d.ts +78 -0
- package/dist/markdown/utils.d.ts.map +1 -0
- package/dist/markdown/utils.js +149 -0
- package/dist/markdown/utils.js.map +1 -0
- package/dist/random/SeededRandom.d.ts +50 -0
- package/dist/random/SeededRandom.d.ts.map +1 -0
- package/dist/random/SeededRandom.js +115 -0
- package/dist/random/SeededRandom.js.map +1 -0
- package/dist/random/index.d.ts +2 -0
- package/dist/random/index.d.ts.map +1 -0
- package/dist/random/index.js +2 -0
- package/dist/random/index.js.map +1 -0
- package/dist/schemas/BlockTemplates.d.ts +583 -0
- package/dist/schemas/BlockTemplates.d.ts.map +1 -0
- package/dist/schemas/BlockTemplates.js +72 -0
- package/dist/schemas/BlockTemplates.js.map +1 -0
- package/dist/schemas/Doc.d.ts +411 -0
- package/dist/schemas/Doc.d.ts.map +1 -0
- package/dist/schemas/Doc.js +90 -0
- package/dist/schemas/Doc.js.map +1 -0
- package/dist/schemas/LayoutStrategy.d.ts +84 -0
- package/dist/schemas/LayoutStrategy.d.ts.map +1 -0
- package/dist/schemas/LayoutStrategy.js +123 -0
- package/dist/schemas/LayoutStrategy.js.map +1 -0
- package/dist/schemas/MediaProvider.d.ts +65 -0
- package/dist/schemas/MediaProvider.d.ts.map +1 -0
- package/dist/schemas/MediaProvider.js +13 -0
- package/dist/schemas/MediaProvider.js.map +1 -0
- package/dist/schemas/Theme.d.ts +163 -0
- package/dist/schemas/Theme.d.ts.map +1 -0
- package/dist/schemas/Theme.js +62 -0
- package/dist/schemas/Theme.js.map +1 -0
- package/dist/schemas/Types.d.ts +14 -0
- package/dist/schemas/Types.d.ts.map +1 -0
- package/dist/schemas/Types.js +5 -0
- package/dist/schemas/Types.js.map +1 -0
- package/dist/schemas/Viewport.d.ts +74 -0
- package/dist/schemas/Viewport.d.ts.map +1 -0
- package/dist/schemas/Viewport.js +63 -0
- package/dist/schemas/Viewport.js.map +1 -0
- package/dist/schemas/index.d.ts +10 -70
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +7 -60
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/themeLibrary.d.ts +41 -0
- package/dist/schemas/themeLibrary.d.ts.map +1 -0
- package/dist/schemas/themeLibrary.js +466 -0
- package/dist/schemas/themeLibrary.js.map +1 -0
- package/dist/spatial/Geohash.d.ts +85 -0
- package/dist/spatial/Geohash.d.ts.map +1 -0
- package/dist/spatial/Geohash.js +142 -0
- package/dist/spatial/Geohash.js.map +1 -0
- package/dist/spatial/Haversine.d.ts +24 -0
- package/dist/spatial/Haversine.d.ts.map +1 -0
- package/dist/spatial/Haversine.js +48 -0
- package/dist/spatial/Haversine.js.map +1 -0
- package/dist/spatial/index.d.ts +3 -111
- package/dist/spatial/index.d.ts.map +1 -0
- package/dist/spatial/index.js +2 -24
- package/dist/spatial/index.js.map +1 -1
- package/dist/storage/LocalForageAdapter.d.ts +36 -0
- package/dist/storage/LocalForageAdapter.d.ts.map +1 -0
- package/dist/storage/LocalForageAdapter.js +82 -0
- package/dist/storage/LocalForageAdapter.js.map +1 -0
- package/dist/storage/LocalStorageAdapter.d.ts +16 -0
- package/dist/storage/LocalStorageAdapter.d.ts.map +1 -0
- package/dist/storage/LocalStorageAdapter.js +50 -0
- package/dist/storage/LocalStorageAdapter.js.map +1 -0
- package/dist/storage/MemoryStorageAdapter.d.ts +15 -0
- package/dist/storage/MemoryStorageAdapter.d.ts.map +1 -0
- package/dist/storage/MemoryStorageAdapter.js +34 -0
- package/dist/storage/MemoryStorageAdapter.js.map +1 -0
- package/dist/storage/Storage.d.ts +23 -0
- package/dist/storage/Storage.d.ts.map +1 -0
- package/dist/storage/Storage.js +9 -0
- package/dist/storage/Storage.js.map +1 -0
- package/dist/storage/index.d.ts +6 -91
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +3 -10
- package/dist/storage/index.js.map +1 -1
- package/dist/story/index.d.ts +3 -2
- package/dist/themeLibrary-DR1VRo-8.d.ts +44 -0
- package/dist/timing/index.d.ts +4 -0
- package/dist/timing/index.d.ts.map +1 -0
- package/dist/timing/index.js +3 -0
- package/dist/timing/index.js.map +1 -0
- package/dist/timing/narrationTiming.d.ts +54 -0
- package/dist/timing/narrationTiming.d.ts.map +1 -0
- package/dist/timing/narrationTiming.js +190 -0
- package/dist/timing/narrationTiming.js.map +1 -0
- package/dist/timing/readingTime.d.ts +54 -0
- package/dist/timing/readingTime.d.ts.map +1 -0
- package/dist/timing/readingTime.js +49 -0
- package/dist/timing/readingTime.js.map +1 -0
- package/package.json +17 -3
- package/src/__tests__/contentExtractor.test.ts +183 -0
- package/src/__tests__/seededRandom.test.ts +142 -0
- package/src/__tests__/slideshowGenerator.test.ts +128 -0
- package/src/__tests__/timing.test.ts +167 -0
- package/src/generate/contentExtractor.ts +808 -0
- package/src/generate/index.ts +21 -0
- package/src/generate/slideshowGenerator.ts +273 -0
- package/src/generate/templateMapper.ts +170 -0
- package/src/index.ts +3 -0
- package/src/random/SeededRandom.ts +127 -0
- package/src/random/index.ts +1 -0
- package/src/timing/index.ts +17 -0
- package/src/timing/narrationTiming.ts +220 -0
- package/src/timing/readingTime.ts +94 -0
|
@@ -1308,45 +1308,4 @@ declare function getCaptionAtTime(captions: CaptionTrack | undefined, time: numb
|
|
|
1308
1308
|
*/
|
|
1309
1309
|
declare function validateDoc(script: Doc): string[];
|
|
1310
1310
|
|
|
1311
|
-
|
|
1312
|
-
* Built-in Theme Library
|
|
1313
|
-
*
|
|
1314
|
-
* Ships 8 curated themes covering documentary, editorial, minimal, and
|
|
1315
|
-
* cinematic styles. Each theme is fully JSON-serializable.
|
|
1316
|
-
*
|
|
1317
|
-
* Usage:
|
|
1318
|
-
* ```ts
|
|
1319
|
-
* import { THEMES, resolveTheme } from '@bendyline/squisq/schemas';
|
|
1320
|
-
*
|
|
1321
|
-
* const theme = resolveTheme('minimalist'); // look up by id
|
|
1322
|
-
* const theme = THEMES.documentary; // direct access
|
|
1323
|
-
* ```
|
|
1324
|
-
*/
|
|
1325
|
-
|
|
1326
|
-
/**
|
|
1327
|
-
* All built-in themes, keyed by id.
|
|
1328
|
-
*/
|
|
1329
|
-
declare const THEMES: Record<string, Theme>;
|
|
1330
|
-
/** The default theme id. */
|
|
1331
|
-
declare const DEFAULT_THEME_ID = "documentary";
|
|
1332
|
-
/** The default theme (documentary — migrated from old DEFAULT_THEME). */
|
|
1333
|
-
declare const DEFAULT_THEME: Theme;
|
|
1334
|
-
/**
|
|
1335
|
-
* Resolve a theme by id. Returns the default theme when `id` is
|
|
1336
|
-
* undefined or not found in the library.
|
|
1337
|
-
*/
|
|
1338
|
-
declare function resolveTheme(id: string | undefined): Theme;
|
|
1339
|
-
/**
|
|
1340
|
-
* Get all available theme ids.
|
|
1341
|
-
*/
|
|
1342
|
-
declare function getAvailableThemes(): string[];
|
|
1343
|
-
/**
|
|
1344
|
-
* Get a summary of all themes (id + name + description) for theme pickers.
|
|
1345
|
-
*/
|
|
1346
|
-
declare function getThemeSummaries(): Array<{
|
|
1347
|
-
id: string;
|
|
1348
|
-
name: string;
|
|
1349
|
-
description?: string;
|
|
1350
|
-
}>;
|
|
1351
|
-
|
|
1352
|
-
export { type TemplateContext as $, type AccentImage as A, type Block as B, type CaptionPhrase as C, DEFAULT_DOC_FONT as D, type PersistentLayerConfig as E, type FactCardInput as F, type GradientBackgroundConfig as G, type PersistentLayerTemplate as H, type ImageBackgroundConfig as I, type PersistentLayerTemplateConfig as J, type PersistentLayerTemplateType as K, type Layer as L, type MapBlockInput as M, type PhotoGridInput as N, type Position as O, type PatternBackgroundConfig as P, type ProgressIndicatorConfig as Q, type PullQuoteInput as R, type QuoteBlockInput as S, type RenderStyle as T, type SectionHeaderInput as U, type ShapeLayer as V, type SolidBackgroundConfig as W, type StartBlockConfig as X, type StatHighlightInput as Y, THEMES as Z, type TemplateBlock as _, type AccentPosition as a, type TemplateFunction as a0, type TemplateRegistry as a1, type TextLayer as a2, type TextStyle as a3, type Theme as a4, type ThemeColorPalette as a5, type ThemeColorScheme as a6, type ThemeStyle as a7, type ThemeTypography as a8, type TitleBlockInput as a9, isPersistentLayerTemplate as aA, isTemplateBlock as aB, scaledFontSize$1 as aC, resolveTheme as aD, scaledFontSize as aE, validateDoc as aF, type TitleCaptionConfig as aa, type Transition as ab, type TransitionType as ac, type TwoColumnInput as ad, VIEWPORT_PRESETS as ae, type VideoLayer as af, type VideoPullQuoteInput as ag, type VideoWithCaptionInput as ah, type ViewportConfig as ai, type ViewportOrientation as aj, type ViewportPreset as ak, calculateDuration as al, calculateFontScale as am, createTemplateContext as an, createTheme as ao, getAspectRatioString as ap, getAvailableThemes as aq, getBlockAtTime as ar, getCaptionAtTime as as, getLayoutHints as at, getSafeTextBounds as au, getSegmentAtTime as av, getThemeSummaries as aw, getTwoColumnPositions as ax, getViewport as ay, getViewportOrientation as az, type Animation as b, type AnimationType as c, type AudioSegment as d, type AudioTrack as e, type CaptionTrack as f, type ColorScheme as g, type ComparisonBarInput as h, type CornerBrandingConfig as i, DEFAULT_THEME as j, DEFAULT_THEME_ID as k, DEFAULT_TITLE_FONT as l, type DateEventInput as m, type DeepPartial as n, type DefinitionCardInput as o, type Doc as p, type DocBlock as q, type FullBleedQuoteInput as r, type ImageLayer as s, type ImageWithCaptionInput as t, type LayoutHints as u, type ListBlockInput as v, type MapLayer as w, type MapMarker as x, type MapTileStyle as y, type PersistentLayer as z };
|
|
1311
|
+
export { type TextLayer as $, type AccentImage as A, type Block as B, type CaptionPhrase as C, DEFAULT_DOC_FONT as D, type PersistentLayerTemplateConfig as E, type FactCardInput as F, type GradientBackgroundConfig as G, type PersistentLayerTemplateType as H, type ImageBackgroundConfig as I, type PhotoGridInput as J, type Position as K, type Layer as L, type MapBlockInput as M, type ProgressIndicatorConfig as N, type PullQuoteInput as O, type PatternBackgroundConfig as P, type QuoteBlockInput as Q, type RenderStyle as R, type SectionHeaderInput as S, type ShapeLayer as T, type SolidBackgroundConfig as U, type StartBlockConfig as V, type StatHighlightInput as W, type TemplateBlock as X, type TemplateContext as Y, type TemplateFunction as Z, type TemplateRegistry as _, type AccentPosition as a, type TextStyle as a0, type Theme as a1, type ThemeColorPalette as a2, type ThemeColorScheme as a3, type ThemeStyle as a4, type ThemeTypography as a5, type TitleBlockInput as a6, type TitleCaptionConfig as a7, type Transition as a8, type TransitionType as a9, type TwoColumnInput as aa, VIEWPORT_PRESETS as ab, type VideoLayer as ac, type VideoPullQuoteInput as ad, type VideoWithCaptionInput as ae, type ViewportConfig as af, type ViewportOrientation as ag, type ViewportPreset as ah, calculateDuration as ai, calculateFontScale as aj, createTemplateContext as ak, createTheme as al, getAspectRatioString as am, getBlockAtTime as an, getCaptionAtTime as ao, getLayoutHints as ap, getSafeTextBounds as aq, getSegmentAtTime as ar, getTwoColumnPositions as as, getViewport as at, getViewportOrientation as au, isPersistentLayerTemplate as av, isTemplateBlock as aw, scaledFontSize$1 as ax, scaledFontSize as ay, validateDoc as az, type Animation as b, type AnimationType as c, type AudioSegment as d, type AudioTrack as e, type CaptionTrack as f, type ColorScheme as g, type ComparisonBarInput as h, type CornerBrandingConfig as i, DEFAULT_TITLE_FONT as j, type DateEventInput as k, type DeepPartial as l, type DefinitionCardInput as m, type Doc as n, type DocBlock as o, type FullBleedQuoteInput as p, type ImageLayer as q, type ImageWithCaptionInput as r, type LayoutHints as s, type ListBlockInput as t, type MapLayer as u, type MapMarker as v, type MapTileStyle as w, type PersistentLayer as x, type PersistentLayerConfig as y, type PersistentLayerTemplate as z };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animationUtils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/animationUtils.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { getAnimationStyle, getDefaultAnimationDuration, getTransitionClass, getAnimationProgress, } from '../doc/utils/animationUtils';
|
|
3
|
+
describe('getAnimationStyle', () => {
|
|
4
|
+
it('returns empty for undefined animation', () => {
|
|
5
|
+
const result = getAnimationStyle(undefined);
|
|
6
|
+
expect(result.className).toBe('');
|
|
7
|
+
expect(result.style).toEqual({});
|
|
8
|
+
});
|
|
9
|
+
it('returns empty for type "none"', () => {
|
|
10
|
+
const result = getAnimationStyle({ type: 'none' });
|
|
11
|
+
expect(result.className).toBe('');
|
|
12
|
+
});
|
|
13
|
+
it('returns correct class for fadeIn', () => {
|
|
14
|
+
const result = getAnimationStyle({ type: 'fadeIn' });
|
|
15
|
+
expect(result.className).toBe('anim-fadeIn');
|
|
16
|
+
});
|
|
17
|
+
it('returns correct class for slowZoom with pan', () => {
|
|
18
|
+
const result = getAnimationStyle({ type: 'slowZoom', panDirection: 'left' });
|
|
19
|
+
expect(result.className).toBe('anim-slowZoom-panLeft');
|
|
20
|
+
});
|
|
21
|
+
it('includes CSS custom properties for duration and delay', () => {
|
|
22
|
+
const result = getAnimationStyle({ type: 'fadeIn', duration: 2, delay: 0.5 });
|
|
23
|
+
expect(result.style['--anim-duration']).toBe('2s');
|
|
24
|
+
expect(result.style['--anim-delay']).toBe('0.5s');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('getDefaultAnimationDuration', () => {
|
|
28
|
+
it('returns 8 for slowZoom', () => {
|
|
29
|
+
expect(getDefaultAnimationDuration('slowZoom')).toBe(8);
|
|
30
|
+
});
|
|
31
|
+
it('returns 1 for fadeIn', () => {
|
|
32
|
+
expect(getDefaultAnimationDuration('fadeIn')).toBe(1);
|
|
33
|
+
});
|
|
34
|
+
it('returns 0.5 for zoomIn', () => {
|
|
35
|
+
expect(getDefaultAnimationDuration('zoomIn')).toBe(0.5);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('getTransitionClass', () => {
|
|
39
|
+
it('returns enter class', () => {
|
|
40
|
+
expect(getTransitionClass('fade', true)).toBe('transition-fade-enter');
|
|
41
|
+
});
|
|
42
|
+
it('returns exit class', () => {
|
|
43
|
+
expect(getTransitionClass('dissolve', false)).toBe('transition-dissolve-exit');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe('getAnimationProgress', () => {
|
|
47
|
+
it('returns 0 before delay', () => {
|
|
48
|
+
const progress = getAnimationProgress({ type: 'fadeIn', delay: 1, duration: 2 }, 0.5, 5);
|
|
49
|
+
expect(progress).toBe(0);
|
|
50
|
+
});
|
|
51
|
+
it('returns 1 after completion', () => {
|
|
52
|
+
const progress = getAnimationProgress({ type: 'fadeIn', delay: 0, duration: 2 }, 3, 5);
|
|
53
|
+
expect(progress).toBe(1);
|
|
54
|
+
});
|
|
55
|
+
it('returns 0.5 at midpoint', () => {
|
|
56
|
+
const progress = getAnimationProgress({ type: 'fadeIn', delay: 0, duration: 2 }, 1, 5);
|
|
57
|
+
expect(progress).toBeCloseTo(0.5);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=animationUtils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animationUtils.test.js","sourceRoot":"","sources":["../../src/__tests__/animationUtils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentExtractor.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/contentExtractor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { extractContent, stripMarkdown, } from '../generate/contentExtractor.js';
|
|
3
|
+
const SAMPLE_TEXT = [
|
|
4
|
+
'Mount Rainier is the largest volcano in the Cascades, standing at 14,411 feet.',
|
|
5
|
+
'In July 1899, the mountain was designated a national park.',
|
|
6
|
+
'The park sees roughly 2 million visitors each year.',
|
|
7
|
+
'"The mountain was calling me," wrote John Muir after his 1888 expedition.',
|
|
8
|
+
'Temperatures range from 20 degrees to 70 degrees depending on elevation.',
|
|
9
|
+
'The park features hiking, camping, fishing, and climbing.',
|
|
10
|
+
'Imagine standing above the clouds at sunrise!',
|
|
11
|
+
'Paradise is a popular visitor area known for its wildflower meadows.',
|
|
12
|
+
'Rainier is the most glaciated peak in the lower 48 states.',
|
|
13
|
+
].join(' ');
|
|
14
|
+
describe('extractContent', () => {
|
|
15
|
+
let result;
|
|
16
|
+
// Run extraction once for all tests
|
|
17
|
+
it('extracts elements from sample text', () => {
|
|
18
|
+
result = extractContent(SAMPLE_TEXT);
|
|
19
|
+
expect(result.elements.length).toBeGreaterThan(0);
|
|
20
|
+
expect(result.sourceLength).toBe(SAMPLE_TEXT.length);
|
|
21
|
+
});
|
|
22
|
+
it('finds stats', () => {
|
|
23
|
+
const stats = result.elements.filter((e) => e.type === 'stat');
|
|
24
|
+
expect(stats.length).toBeGreaterThan(0);
|
|
25
|
+
// Should find 14,411 feet and/or 2 million
|
|
26
|
+
const values = stats.map((s) => (s.data.type === 'stat' ? s.data.value : ''));
|
|
27
|
+
expect(values.some((v) => v.includes('14,411') || v.includes('2 million') || v.includes('feet'))).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
it('finds dates', () => {
|
|
30
|
+
const dates = result.elements.filter((e) => e.type === 'date');
|
|
31
|
+
expect(dates.length).toBeGreaterThan(0);
|
|
32
|
+
});
|
|
33
|
+
it('finds quotes', () => {
|
|
34
|
+
const quotes = result.elements.filter((e) => e.type === 'quote');
|
|
35
|
+
expect(quotes.length).toBeGreaterThan(0);
|
|
36
|
+
const quoteData = quotes[0].data;
|
|
37
|
+
if (quoteData.type === 'quote') {
|
|
38
|
+
expect(quoteData.quote).toContain('mountain was calling me');
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
it('respects minConfidence filter', () => {
|
|
42
|
+
const strict = extractContent(SAMPLE_TEXT, { minConfidence: 0.9 });
|
|
43
|
+
const loose = extractContent(SAMPLE_TEXT, { minConfidence: 0.1 });
|
|
44
|
+
expect(loose.elements.length).toBeGreaterThanOrEqual(strict.elements.length);
|
|
45
|
+
});
|
|
46
|
+
it('respects types filter', () => {
|
|
47
|
+
const onlyStats = extractContent(SAMPLE_TEXT, { types: ['stat'] });
|
|
48
|
+
for (const elem of onlyStats.elements) {
|
|
49
|
+
expect(elem.type).toBe('stat');
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
it('respects maxPerType', () => {
|
|
53
|
+
const limited = extractContent(SAMPLE_TEXT, { maxPerType: 1 });
|
|
54
|
+
const typeCounts = new Map();
|
|
55
|
+
for (const elem of limited.elements) {
|
|
56
|
+
typeCounts.set(elem.type, (typeCounts.get(elem.type) ?? 0) + 1);
|
|
57
|
+
}
|
|
58
|
+
for (const count of typeCounts.values()) {
|
|
59
|
+
expect(count).toBeLessThanOrEqual(1);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
it('deduplicates overlapping extractions', () => {
|
|
63
|
+
// Every element should have a unique source position range
|
|
64
|
+
for (let i = 0; i < result.elements.length; i++) {
|
|
65
|
+
for (let j = i + 1; j < result.elements.length; j++) {
|
|
66
|
+
const a = result.elements[i];
|
|
67
|
+
const b = result.elements[j];
|
|
68
|
+
// They shouldn't share the exact same start position
|
|
69
|
+
if (a.sourcePosition === b.sourcePosition) {
|
|
70
|
+
// If they overlap, one should have been removed by dedup
|
|
71
|
+
// (this is checking that the dedup is working at all)
|
|
72
|
+
expect(a.type).not.toBe(b.type);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
it('returns correct stats counts', () => {
|
|
78
|
+
expect(result.stats.totalCount).toBe(result.elements.length);
|
|
79
|
+
expect(result.stats.statCount).toBe(result.elements.filter((e) => e.type === 'stat').length);
|
|
80
|
+
});
|
|
81
|
+
it('sorts elements by source position', () => {
|
|
82
|
+
for (let i = 1; i < result.elements.length; i++) {
|
|
83
|
+
expect(result.elements[i].sourcePosition).toBeGreaterThanOrEqual(result.elements[i - 1].sourcePosition);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('extractContent — comparisons', () => {
|
|
88
|
+
it('detects "from X to Y" comparisons', () => {
|
|
89
|
+
const text = 'Temperatures range from 20 degrees to 70 degrees depending on altitude.';
|
|
90
|
+
const result = extractContent(text, { types: ['comparison'] });
|
|
91
|
+
expect(result.elements.length).toBeGreaterThan(0);
|
|
92
|
+
const comp = result.elements[0].data;
|
|
93
|
+
if (comp.type === 'comparison') {
|
|
94
|
+
expect(comp.left.label).toBeTruthy();
|
|
95
|
+
expect(comp.right.label).toBeTruthy();
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('extractContent — impact lines', () => {
|
|
100
|
+
it('detects short punchy sentences', () => {
|
|
101
|
+
const text = 'Imagine standing above the clouds! Discover the hidden valley. The weather is variable.';
|
|
102
|
+
const result = extractContent(text, { types: ['impactLine'] });
|
|
103
|
+
expect(result.elements.length).toBeGreaterThan(0);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('extractContent — lists', () => {
|
|
107
|
+
it('detects "including X, Y, and Z" lists', () => {
|
|
108
|
+
const text = 'Activities including hiking, camping, fishing, and climbing are popular.';
|
|
109
|
+
const result = extractContent(text, { types: ['list'] });
|
|
110
|
+
expect(result.elements.length).toBeGreaterThan(0);
|
|
111
|
+
const listData = result.elements[0].data;
|
|
112
|
+
if (listData.type === 'list') {
|
|
113
|
+
expect(listData.items.length).toBeGreaterThanOrEqual(3);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('extractContent — definitions', () => {
|
|
118
|
+
it('detects "Term is a definition" patterns', () => {
|
|
119
|
+
const text = 'Paradise is a popular visitor area known for its wildflower meadows and scenic viewpoints.';
|
|
120
|
+
const result = extractContent(text, { types: ['definition'] });
|
|
121
|
+
expect(result.elements.length).toBeGreaterThan(0);
|
|
122
|
+
const defData = result.elements[0].data;
|
|
123
|
+
if (defData.type === 'definition') {
|
|
124
|
+
expect(defData.term).toBe('Paradise');
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('stripMarkdown', () => {
|
|
129
|
+
it('removes headers', () => {
|
|
130
|
+
expect(stripMarkdown('# Hello\n## World')).toBe('Hello\nWorld');
|
|
131
|
+
});
|
|
132
|
+
it('removes bold and italic', () => {
|
|
133
|
+
expect(stripMarkdown('**bold** and *italic*')).toBe('bold and italic');
|
|
134
|
+
});
|
|
135
|
+
it('removes links, keeping text', () => {
|
|
136
|
+
expect(stripMarkdown('[Click here](https://example.com)')).toBe('Click here');
|
|
137
|
+
});
|
|
138
|
+
it('removes images entirely', () => {
|
|
139
|
+
expect(stripMarkdown('')).toBe('');
|
|
140
|
+
});
|
|
141
|
+
it('removes code blocks', () => {
|
|
142
|
+
expect(stripMarkdown('before\n```js\ncode\n```\nafter')).toBe('before\n\nafter');
|
|
143
|
+
});
|
|
144
|
+
it('removes blockquote markers', () => {
|
|
145
|
+
expect(stripMarkdown('> quoted text')).toBe('quoted text');
|
|
146
|
+
});
|
|
147
|
+
it('collapses excess newlines', () => {
|
|
148
|
+
expect(stripMarkdown('a\n\n\n\nb')).toBe('a\n\nb');
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=contentExtractor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentExtractor.test.js","sourceRoot":"","sources":["../../src/__tests__/contentExtractor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geohash.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/geohash.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { encodeGeohash, decodeGeohash, getNeighbors, getGeohash4Neighbors, getGeohashPrefix, geohashToHierarchicalPath, getGeohashPath, geohashOverlapsBounds, } from '../spatial/Geohash';
|
|
3
|
+
describe('encodeGeohash / decodeGeohash round-trip', () => {
|
|
4
|
+
it('encodes and decodes Seattle', () => {
|
|
5
|
+
const lat = 47.6062;
|
|
6
|
+
const lng = -122.3321;
|
|
7
|
+
const hash = encodeGeohash(lat, lng, 6);
|
|
8
|
+
expect(hash).toHaveLength(6);
|
|
9
|
+
const decoded = decodeGeohash(hash);
|
|
10
|
+
expect(decoded.lat).toBeCloseTo(lat, 1);
|
|
11
|
+
expect(decoded.lng).toBeCloseTo(lng, 1);
|
|
12
|
+
});
|
|
13
|
+
it('encodes and decodes equator/prime meridian', () => {
|
|
14
|
+
const hash = encodeGeohash(0, 0, 4);
|
|
15
|
+
expect(hash).toHaveLength(4);
|
|
16
|
+
const decoded = decodeGeohash(hash);
|
|
17
|
+
expect(decoded.lat).toBeCloseTo(0, 0);
|
|
18
|
+
expect(decoded.lng).toBeCloseTo(0, 0);
|
|
19
|
+
});
|
|
20
|
+
it('defaults to precision 9', () => {
|
|
21
|
+
const hash = encodeGeohash(47.6, -122.3);
|
|
22
|
+
expect(hash).toHaveLength(9);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('getNeighbors', () => {
|
|
26
|
+
it('returns 8 neighbors', () => {
|
|
27
|
+
const neighbors = getNeighbors('c23n');
|
|
28
|
+
expect(neighbors).toHaveLength(8);
|
|
29
|
+
neighbors.forEach((n) => expect(n).toHaveLength(4));
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('getGeohash4Neighbors', () => {
|
|
33
|
+
it('returns center + 8 neighbors (9 total)', () => {
|
|
34
|
+
const result = getGeohash4Neighbors('c23n');
|
|
35
|
+
expect(result).toHaveLength(9);
|
|
36
|
+
expect(result[0]).toBe('c23n');
|
|
37
|
+
});
|
|
38
|
+
it('throws for non-4-char input', () => {
|
|
39
|
+
expect(() => getGeohash4Neighbors('c2')).toThrow();
|
|
40
|
+
expect(() => getGeohash4Neighbors('c23nn')).toThrow();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('getGeohashPrefix', () => {
|
|
44
|
+
it('extracts prefix', () => {
|
|
45
|
+
expect(getGeohashPrefix('c23nxy', 4)).toBe('c23n');
|
|
46
|
+
expect(getGeohashPrefix('c23nxy', 2)).toBe('c2');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('geohashToHierarchicalPath', () => {
|
|
50
|
+
it('converts 4-char geohash to path', () => {
|
|
51
|
+
expect(geohashToHierarchicalPath('c23n')).toBe('c/2/3/n');
|
|
52
|
+
expect(geohashToHierarchicalPath('9q8y')).toBe('9/q/8/y');
|
|
53
|
+
});
|
|
54
|
+
it('throws for non-4-char input', () => {
|
|
55
|
+
expect(() => geohashToHierarchicalPath('c2')).toThrow();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('getGeohashPath', () => {
|
|
59
|
+
it('returns empty for same cell', () => {
|
|
60
|
+
expect(getGeohashPath('c23n', 'c23n')).toEqual([]);
|
|
61
|
+
});
|
|
62
|
+
it('returns intermediate cells between two geohashes', () => {
|
|
63
|
+
const path = getGeohashPath('c23n', 'c24k');
|
|
64
|
+
expect(path.length).toBeGreaterThan(0);
|
|
65
|
+
path.forEach((h) => {
|
|
66
|
+
expect(h).toHaveLength(4);
|
|
67
|
+
expect(h).not.toBe('c23n');
|
|
68
|
+
expect(h).not.toBe('c24k');
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('geohashOverlapsBounds', () => {
|
|
73
|
+
it('detects overlap', () => {
|
|
74
|
+
// Seattle area: c23n
|
|
75
|
+
const bounds = { north: 48, south: 47, east: -122, west: -123 };
|
|
76
|
+
const hash = encodeGeohash(47.6, -122.3, 4);
|
|
77
|
+
expect(geohashOverlapsBounds(hash, bounds)).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
it('detects non-overlap', () => {
|
|
80
|
+
// Tokyo area bounds
|
|
81
|
+
const bounds = { north: 36, south: 35, east: 140, west: 139 };
|
|
82
|
+
// Seattle geohash
|
|
83
|
+
const hash = encodeGeohash(47.6, -122.3, 4);
|
|
84
|
+
expect(geohashOverlapsBounds(hash, bounds)).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=geohash.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geohash.test.js","sourceRoot":"","sources":["../../src/__tests__/geohash.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLayers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/getLayers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { getLayers } from '../doc/getLayers.js';
|
|
3
|
+
import { DEFAULT_THEME } from '../schemas/themeLibrary.js';
|
|
4
|
+
import { VIEWPORT_PRESETS } from '../schemas/Viewport.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Helpers
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
function makeTemplateBlock(overrides = {}) {
|
|
9
|
+
return {
|
|
10
|
+
template: 'titleBlock',
|
|
11
|
+
id: 'test-title-1',
|
|
12
|
+
duration: 5,
|
|
13
|
+
audioSegment: 0,
|
|
14
|
+
title: 'Hello World',
|
|
15
|
+
...overrides,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function makeRawBlock(layers) {
|
|
19
|
+
return {
|
|
20
|
+
id: 'raw-block-1',
|
|
21
|
+
duration: 5,
|
|
22
|
+
startTime: 0,
|
|
23
|
+
audioSegment: 0,
|
|
24
|
+
layers,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const defaultContext = {
|
|
28
|
+
theme: DEFAULT_THEME,
|
|
29
|
+
viewport: VIEWPORT_PRESETS.landscape,
|
|
30
|
+
blockIndex: 0,
|
|
31
|
+
totalBlocks: 5,
|
|
32
|
+
};
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Tests
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
describe('getLayers', () => {
|
|
37
|
+
it('generates layers for a known template block', () => {
|
|
38
|
+
const block = makeTemplateBlock({ template: 'titleBlock', title: 'Test Title' });
|
|
39
|
+
const layers = getLayers(block, defaultContext);
|
|
40
|
+
expect(Array.isArray(layers)).toBe(true);
|
|
41
|
+
expect(layers.length).toBeGreaterThan(0);
|
|
42
|
+
// titleBlock always produces at least a text layer with the title
|
|
43
|
+
const textLayer = layers.find((l) => l.type === 'text');
|
|
44
|
+
expect(textLayer).toBeDefined();
|
|
45
|
+
expect(textLayer.content.text).toContain('Test Title');
|
|
46
|
+
});
|
|
47
|
+
it('generates layers for statHighlight template', () => {
|
|
48
|
+
const block = makeTemplateBlock({
|
|
49
|
+
template: 'statHighlight',
|
|
50
|
+
stat: '42%',
|
|
51
|
+
description: 'of users',
|
|
52
|
+
});
|
|
53
|
+
const layers = getLayers(block, defaultContext);
|
|
54
|
+
expect(layers.length).toBeGreaterThan(0);
|
|
55
|
+
const texts = layers.filter((l) => l.type === 'text');
|
|
56
|
+
expect(texts.length).toBeGreaterThanOrEqual(1);
|
|
57
|
+
});
|
|
58
|
+
it('returns raw block layers when block has pre-computed layers', () => {
|
|
59
|
+
const existingLayers = [
|
|
60
|
+
{
|
|
61
|
+
type: 'shape',
|
|
62
|
+
id: 'test-shape',
|
|
63
|
+
content: { shape: 'rect', fill: '#ff0000' },
|
|
64
|
+
position: { x: 0, y: 0, width: 100, height: 100 },
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
const block = makeRawBlock(existingLayers);
|
|
68
|
+
const layers = getLayers(block, defaultContext);
|
|
69
|
+
expect(layers).toEqual(existingLayers);
|
|
70
|
+
});
|
|
71
|
+
it('returns empty array for unknown template', () => {
|
|
72
|
+
const block = {
|
|
73
|
+
template: 'totally_nonexistent',
|
|
74
|
+
id: 'unknown-1',
|
|
75
|
+
duration: 5,
|
|
76
|
+
audioSegment: 0,
|
|
77
|
+
};
|
|
78
|
+
const layers = getLayers(block, defaultContext);
|
|
79
|
+
expect(layers).toEqual([]);
|
|
80
|
+
});
|
|
81
|
+
it('returns empty array for block with no template and no layers', () => {
|
|
82
|
+
const block = { id: 'empty-1', duration: 5, startTime: 0, audioSegment: 0 };
|
|
83
|
+
const layers = getLayers(block, defaultContext);
|
|
84
|
+
expect(layers).toEqual([]);
|
|
85
|
+
});
|
|
86
|
+
it('uses default context values when context is omitted', () => {
|
|
87
|
+
const block = makeTemplateBlock({ template: 'titleBlock', title: 'Defaults' });
|
|
88
|
+
const layers = getLayers(block);
|
|
89
|
+
expect(Array.isArray(layers)).toBe(true);
|
|
90
|
+
expect(layers.length).toBeGreaterThan(0);
|
|
91
|
+
});
|
|
92
|
+
it('handles template that throws an error gracefully', () => {
|
|
93
|
+
// We spy on console.error to suppress noise and verify it was called
|
|
94
|
+
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
95
|
+
// comparisonBar requires numeric values; passing invalid data may throw
|
|
96
|
+
// but getLayers should catch and return []
|
|
97
|
+
const block = makeTemplateBlock({
|
|
98
|
+
template: 'comparisonBar',
|
|
99
|
+
// Missing required fields
|
|
100
|
+
});
|
|
101
|
+
const layers = getLayers(block, defaultContext);
|
|
102
|
+
expect(Array.isArray(layers)).toBe(true);
|
|
103
|
+
consoleSpy.mockRestore();
|
|
104
|
+
});
|
|
105
|
+
describe('persistent layers injection', () => {
|
|
106
|
+
const bottomLayer = {
|
|
107
|
+
type: 'shape',
|
|
108
|
+
id: 'bottom',
|
|
109
|
+
content: { shape: 'rect', fill: '#000' },
|
|
110
|
+
position: { x: 0, y: 0, width: 100, height: 100 },
|
|
111
|
+
};
|
|
112
|
+
const topLayer = {
|
|
113
|
+
type: 'shape',
|
|
114
|
+
id: 'top',
|
|
115
|
+
content: { shape: 'rect', fill: '#fff' },
|
|
116
|
+
position: { x: 0, y: 0, width: 100, height: 100 },
|
|
117
|
+
};
|
|
118
|
+
const persistentConfig = {
|
|
119
|
+
bottomLayers: [bottomLayer],
|
|
120
|
+
topLayers: [topLayer],
|
|
121
|
+
};
|
|
122
|
+
it('injects persistent bottom and top layers around block layers', () => {
|
|
123
|
+
const block = makeTemplateBlock({ template: 'titleBlock', title: 'With Persistent' });
|
|
124
|
+
const layers = getLayers(block, { ...defaultContext, persistentLayers: persistentConfig });
|
|
125
|
+
// First layer should be the bottom persistent layer
|
|
126
|
+
expect(layers[0]).toEqual(bottomLayer);
|
|
127
|
+
// Last layer should be the top persistent layer
|
|
128
|
+
expect(layers[layers.length - 1]).toEqual(topLayer);
|
|
129
|
+
// Middle layers (from template) should exist
|
|
130
|
+
expect(layers.length).toBeGreaterThan(2);
|
|
131
|
+
});
|
|
132
|
+
it('respects useBottomLayer: false opt-out', () => {
|
|
133
|
+
const block = makeTemplateBlock({
|
|
134
|
+
template: 'titleBlock',
|
|
135
|
+
title: 'No Bottom',
|
|
136
|
+
useBottomLayer: false,
|
|
137
|
+
});
|
|
138
|
+
const layers = getLayers(block, { ...defaultContext, persistentLayers: persistentConfig });
|
|
139
|
+
// Should NOT start with the bottom persistent layer
|
|
140
|
+
expect(layers[0]).not.toEqual(bottomLayer);
|
|
141
|
+
// Should still end with the top persistent layer
|
|
142
|
+
expect(layers[layers.length - 1]).toEqual(topLayer);
|
|
143
|
+
});
|
|
144
|
+
it('respects useTopLayer: false opt-out', () => {
|
|
145
|
+
const block = makeTemplateBlock({
|
|
146
|
+
template: 'titleBlock',
|
|
147
|
+
title: 'No Top',
|
|
148
|
+
useTopLayer: false,
|
|
149
|
+
});
|
|
150
|
+
const layers = getLayers(block, { ...defaultContext, persistentLayers: persistentConfig });
|
|
151
|
+
// Should start with the bottom persistent layer
|
|
152
|
+
expect(layers[0]).toEqual(bottomLayer);
|
|
153
|
+
// Should NOT end with the top persistent layer
|
|
154
|
+
expect(layers[layers.length - 1]).not.toEqual(topLayer);
|
|
155
|
+
});
|
|
156
|
+
it('skips injection when no persistent layers are configured', () => {
|
|
157
|
+
const block = makeTemplateBlock({ template: 'titleBlock', title: 'No Persistent' });
|
|
158
|
+
const withoutPersistent = getLayers(block, defaultContext);
|
|
159
|
+
const withEmptyPersistent = getLayers(block, {
|
|
160
|
+
...defaultContext,
|
|
161
|
+
persistentLayers: { bottomLayers: [], topLayers: [] },
|
|
162
|
+
});
|
|
163
|
+
expect(withoutPersistent).toEqual(withEmptyPersistent);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=getLayers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLayers.test.js","sourceRoot":"","sources":["../../src/__tests__/getLayers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"haversine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/haversine.test.ts"],"names":[],"mappings":""}
|